/* global axios */
import ApiClient from './ApiClient'

export const buildContactParams = (page, sortAttr, label, search) => {
  let params = `includeContactInboxes=false&page=${page}&sort=${sortAttr}`
  if (search) {
    params = `${params}&q=${search}`
  }
  if (label) {
    params = `${params}&labels=${label}`
  }
  return params
}

class ContactAPI extends ApiClient {
  constructor () {
    super('contacts', { accountScoped: true })
  }

  get (page, sortAttr = 'name', label = '') {
    const requestURL = `${this.url}?${buildContactParams(
      page,
      sortAttr,
      label,
      ''
    )}`
    return axios.get(requestURL)
  }

  getConversations (contactId) {
    return axios.get(`${this.url}/${contactId}/conversations`)
  }

  getContactableInboxes (contactId) {
    return axios.get(`${this.url}/${contactId}/contactableInboxes`)
  }

  getContactLabels (contactId) {
    return axios.get(`${this.url}/${contactId}/labels`)
  }

  updateContactLabels (contactId, labels) {
    return axios.post(`${this.url}/${contactId}/labels`, { labels })
  }

  search (search = '', page = 1, sortAttr = 'name', label = '') {
    const requestURL = `${this.url}/search?${buildContactParams(
      page,
      sortAttr,
      label,
      search
    )}`
    return axios.get(requestURL)
  }

  filter (page = 1, sortAttr = 'name', queryPayload) {
    const requestURL = `${this.url}/filter?${buildContactParams(page, sortAttr)}`
    return axios.post(requestURL, queryPayload)
  }

  importContacts (file) {
    const formData = new FormData()
    formData.append('import_file', file)
    return axios.post(`${this.url}/import`, formData, {
      headers: { 'Content-Type': 'multipart/form-data' },
    })
  }

  destroyCustomAttributes (contactId, customAttributes) {
    return axios.post(`${this.url}/${contactId}/destroyCustomAttributes`, {
      customAttributes: customAttributes,
    })
  }

  destroyAvatar (contactId) {
    return axios.delete(`${this.url}/${contactId}/avatar`)
  }
}

export default new ContactAPI()
